[アップデート] Glueテーブルの列統計を自動で計算する機能が登場しました #AWSreInvent
データ事業本部 インテグレーション部 機械学習チームの鈴木です。
Glueデータカタログのテーブルで、テーブルの作成およびデータの変更を検知し、列統計を自動で計算してくれる機能がアナウンスされたのでご紹介します。
列統計について
Glueテーブルであらかじめカラムの統計情報を計算しておくことで、Amazon Athenaなどから実行するSQLをより最適化できるようにする機能です。
Glueテーブルの画面の、Column statisticsタブから確認できます。
列統計はこれまでスケジュールかオンデマンドで実行するものでしたが、今回のアップデートでデータの変更やテーブルの作成をトリガーに自動で実行してくれるようになりました。東京リージョンでもサポートされています。
設定はLake Formationから行います。
使ってみた
ここではとりあえずあるIcebergテーブルについて、列統計を自動で計算するように設定します。自動計算の設定はLake Formationのデフォルトのカタログ全体に影響するのでご留意ください。
準備
まずはIcebergテーブルの列統計をオンデマンドで作成しておきました。これは列統計の計算用のIAMロールを作り、動作確認しておきたかったためです。
Irisデータ※を格納したIcebergテーブルを作成しておき、Glueテーブルの画面のColumn statistics
タブのGenerate
ボタンを押し、オンデマンドで統計の生成を実行しました。このときIAMロールはこのテーブル向けに新規に作成しました。
なお、Lake Formation環境のため、作成したIAMロールにはこのテーブルにアクセスできるようLake Formation側で権限を追加で付与しました。
※このデータセットは、下記リンクにて公開されています。
正常に実行されると、上記画像のように統計が生成されました。
自動計算の有効化
Lake Formationで、自動計算の有効化を行いました。
この設定はデフォルトのCatalogへの変更権限があるユーザーまたはロールで行います。(こちらについては補足に記載します。)
CatalogからデフォルトのCatalogを選び、actionよりOptimization configurationのEditを選択します。
有効化のためのチェックボックスをクリックし、IAMロールとして先ほど作成したものを入力しました。
今回はごく限られた数のテーブルのみある環境だったため、特定のテーブルの列統計計算ができるIAM Roleを設定しましたが、本来はカタログ全体のテーブルにアクセス可能なロールを設定するのがよいと思います。
Submitをクリックして確定しました。
自動計算の確認
テーブルを変更して、統計が再計算されるか確認しました。
Amazon Athenaのクエリエディタから以下のクエリを実行し、レコードを減らしてみました。
DELETE FROM database1.iris_iceberg
WHERE species = 'setosa';
speciesの一つをごっそり削除したので、統計のspeciesは3から2になるのが正解です。
Glueテーブルを見に行くと、たしかになにもしていないのに統計が更新されました!
補足
デフォルトのCatalogへの変更権限の付与
自動計算を有効化する際には、デフォルトのCatalogにAlterの権限があるユーザーまたはロールを使用する必要がありました。
デフォルトのCatalogを選択し、PermissionsのGrantを選択しました。
LF-Tags or catalog resourcesで、Named Data Catalog resourcesを選択し、CatalogsでデフォルトCatalogだけを選択すると、ページ下部でCatalog permissionsが表示されるので、Alterを含む権限を付与しました。(今回の検証ではSuperにしました。)
最後に
Glueデータカタログのテーブルで、テーブルの作成およびデータの変更を検知し、列統計を自動で計算してくれる機能がアナウンスされたのでご紹介しました。
Lake Formationの利用が必要ですが、データの変更を検知して自動で統計を再計算してくれるのであれば、独自に再計算の仕組みを作り込んだりすることなく常に最も良い統計でクエリを最適化できるのでとてもよいですね。